跳至主要内容

Linode 架站流程紀錄

每次都忘了記,藉這次機會來記錄一下,用 Linode(Akamai) 要怎麼架站。

先說,我知道靜態網站可以用更簡單的方式,像現在 Linode 有 Object Storage 的方案,或是其他平台主機商也有提供更快速的解決方案。

不過我過去用以下這種方式,才真的比較接觸到 Linux 的有趣之處,所以這次考量後,還是使用這個流程,並且記錄下來。

除了這個網站 郊郊郊狼 外,我的主要創作網站 野火堆,也是用這個方式架成的。

這邊只講流程,沒有要解釋太多的意思,一邊研究一邊架站也是樂趣之一。

一些基本資料和備註:

  • 本地端電腦 (Win11 + Powershell)
  • Linode 的方案 (這次用 Shared CPU - Nanode 1 GB 方案,每月 5 美金,OS 為 Ubuntu)
  • ssh key 我已經先做好了
  • 我都是看英文資源,所以要跟以下流程,需要有一定英文基礎
  • 這流程是用在靜態網站架設,如果你要用有資料庫的那種,例如 Wordpress,還需要另外安裝資料庫喔!
  • 如果你是純小白,這可能會花上你好幾個小時,這很正常。這個流程我做過 3 次,這次還是花了 3-4 小時左右(邊寫邊紀錄),理想上應該 1 小時可以完成
  • 如果你要架好幾個網站(不同域名/子域名),可以只買一個方案,然後域名跟 Nginx 那邊要再多設定,這邊先不講了。我是習慣分開方案經營就是了。

linode 設定流程:

設定與建立 Linode (現在叫 Akamai)

  1. 建立 Linode,選方案跟 root PW

設定與更新 linux

  1. 使用 ssh 連線,準備更新系統。通常我選 Ubuntu

    sudo apt update && apt upgrade
  2. 設定系統 地區 時區

    dpkg-reconfigure tzdata
  3. 設定 自訂 hostname example-hostname

    example-hostname 改成想要的名字,這樣登入時,localhost 會變成自訂名字。

    例如本來是,root@localhost,會變成 root@example

  4. 更新 host 檔案

    nano /etc/hosts

    加入後面兩行,還有剛剛自己的設定的 host name,X 的部分,Linode 買完方案後會提供 ip,請複製貼上

        127.0.0.1 localhost.localdomain localhost

    (新增以下兩行)

    XXX.X.XXX.XX example-hostname.example.com example-hostname

    XXXX:XXXX::XXXX:XXXX:XXXX:XXXX example-hostname.example.com example-hostname
  5. 建立新使用者,example_user 為自訂名稱,請修改

    adduser example_user
  6. 將剛新增的使用者賦予 sudo 權限

    adduser sudo example_user

    登出後就可以用使用者作 ssh 登入。 像這樣

    ssh example_user@xxx.xxx.xxx.xxx

設定 SSH KEY

  1. 登入新增是使用者後,建立放 ssh key 資料夾

    mkdir -p ~/.ssh && sudo chmod -R 700 ~/.ssh/

    我已經有自己產生 key,所以這邊是直接傳公鑰到你的遠端主機,本地端請保留私鑰

    Win11 可以用 Openssh 來產生鑰匙,相關教學請自己查閱最下方官方文件連結,這邊只講流程

    注意: Windows 的 Powershell 沒辦法直接用下面的範例,C 槽會判定成無效 host name。

    scp C:\Users\MyUserName\.ssh/id_rsa.pub example_user@XXX.X.X.XXX:~/.ssh/authorized_keys

    解決辦法是,直接 cd 到 public key 所在資料夾,再用 scp 來傳

    cd ./.ssh
    scp id_ed25519.pub example_user@XXX.XXX.XXX.XXX:~/.ssh/authorized_keys
  2. 修改剛上傳至主機的 public key 權限

    sudo chmod -R 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys
  3. 登出,使用新增使用者登入,若是初次應該會要求 passphrase 要設定

  4. 設定禁止 root 登入

     sudo nano /etc/ssh/sshd_config

    config 中,PermitRootLogin 修改成 no

    # Authentication:
    ...
    PermitRootLogin no

安裝防火牆 UFW

  1. 允許 ssh

     sudo ufw allow ssh
  2. http port 80,以及 https 443

    sudo ufw allow 80/tcp
    sudo ufw allow http/tcp
    sudo ufw allow 443
  3. 好了之後可以用 enable 查看,或是用 status 看目前加入的白名單

    sudo ufw enable
    sudo ufw status

安裝並設定 Nginx

  1. 安裝 Nginx

    sudo apt install nginx, 

    確認狀態,順利運行的話,下一步

    sudo systemctl status nginx
  2. 還沒掛域名的情況下,直接用 ip 例如 http://192.0.2.0,應該會看到 Nginx 首頁

  3. unlink 預設 conf 檔案

    sudo unlink /etc/nginx/sites-enabled/default
  4. 在 sites-available 底下建立自訂域名的 conf 檔案

    sudo touch /etc/nginx/sites-available/example.com

    記得不用加 .conf 副檔名

  5. 然後編輯該 conf 檔

     sudo nano /etc/nginx/sites-available/example.com

    貼上,example.com 要改成自己的網域

    server {
    listen 80;
    listen [::]:80;
    server_name example.com;

    root /var/www/example.com;
    index index.html;

    location / {
    try_files $uri $uri/ =404;
    }
    }
  6. 使用串聯指令

    sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/ 
  7. 測試 conf 檔輸入正確,正確會顯示 Success

     sudo nginx -t
  8. 有成功就重啟

    sudo systemctl restart nginx
  9. conf 有指定 root index 檔案,所以要建立相關資料夾

    sudo mkdir /var/www/example.com
  10. 確保 前面新增的使用者可以在 Filezilla 傳輸,記得變更權限

    sudo chown -R example_user /var/www/example.com/

    因為只需要上傳網站到/var/www/example.com/,所以只指定這個資料夾的權限

  11. 使用 Cerbot 跑 SSL 流程比較簡單, Cerbot 會幫你把該網域的 nginx conf 檔加入 443,這樣才能處理 https,也可以再一開始設定網站 conf 檔時就加入。

    另外憑證位置跟自動續約,按照 cerbot 步驟,都會幫你處理好。

    這裡不多說明,基本上就是在 Cerbot 選好你的主機 OS 跟 Nginx,接下來按網站步驟走就好。

其他

  • Linode 要記得加入你的域名,要記得設定 A/AAAA Record
  • 域名商 那邊要設 DNS,設定方式從 linode 那邊拿
  • 記得 UFW 也要加入 443,sudo ufw allow 443,要不然網址連過去會出現 ERR_CONNECTION_TIMED_OUT

參考來源,來自 Linode 官方文件,詳細說明可以直接在網站看:

https://techdocs.akamai.com/cloud-computing/docs/set-up-and-secure-a-compute-instance

https://www.linode.com/docs/guides/configure-firewall-with-ufw/

https://www.linode.com/docs/guides/how-to-install-and-use-nginx-on-ubuntu-20-04/